home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / fortran / linpklib.zip / SGBDI.FOR < prev    next >
Text File  |  1984-01-01  |  2KB  |  73 lines

  1.       SUBROUTINE SGBDI(ABD,LDA,N,ML,MU,IPVT,DET)
  2.       INTEGER LDA,N,ML,MU,IPVT(1)
  3.       REAL ABD(LDA,1),DET(2)
  4. C
  5. C     SGBDI COMPUTES THE DETERMINANT OF A BAND MATRIX
  6. C     USING THE FACTORS COMPUTED BY SGBCO OR SGBFA.
  7. C     IF THE INVERSE IS NEEDED, USE SGBSL  N  TIMES.
  8. C
  9. C     ON ENTRY
  10. C
  11. C        ABD     REAL(LDA, N)
  12. C                THE OUTPUT FROM SGBCO OR SGBFA.
  13. C
  14. C        LDA     INTEGER
  15. C                THE LEADING DIMENSION OF THE ARRAY  ABD .
  16. C
  17. C        N       INTEGER
  18. C                THE ORDER OF THE ORIGINAL MATRIX.
  19. C
  20. C        ML      INTEGER
  21. C                NUMBER OF DIAGONALS BELOW THE MAIN DIAGONAL.
  22. C
  23. C        MU      INTEGER
  24. C                NUMBER OF DIAGONALS ABOVE THE MAIN DIAGONAL.
  25. C
  26. C        IPVT    INTEGER(N)
  27. C                THE PIVOT VECTOR FROM SGBCO OR SGBFA.
  28. C
  29. C     ON RETURN
  30. C
  31. C        DET     REAL(2)
  32. C                DETERMINANT OF ORIGINAL MATRIX.
  33. C                DETERMINANT = DET(1) * 10.0**DET(2)
  34. C                WITH  1.0 .LE. ABS(DET(1)) .LT. 10.0
  35. C                OR  DET(1) = 0.0 .
  36. C
  37. C     LINPACK. THIS VERSION DATED 08/14/78 .
  38. C     CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB.
  39. C
  40. C     SUBROUTINES AND FUNCTIONS
  41. C
  42. C     FORTRAN ABS
  43. C
  44. C     INTERNAL VARIABLES
  45. C
  46.       REAL TEN
  47.       INTEGER I,M
  48. C
  49. C
  50.       M = ML + MU + 1
  51.       DET(1) = 1.0E0
  52.       DET(2) = 0.0E0
  53.       TEN = 10.0E0
  54.       DO 50 I = 1, N
  55.          IF (IPVT(I) .NE. I) DET(1) = -DET(1)
  56.          DET(1) = ABD(M,I)*DET(1)
  57. C     ...EXIT
  58.          IF (DET(1) .EQ. 0.0E0) GO TO 60
  59.    10    IF (ABS(DET(1)) .GE. 1.0E0) GO TO 20
  60.             DET(1) = TEN*DET(1)
  61.             DET(2) = DET(2) - 1.0E0
  62.          GO TO 10
  63.    20    CONTINUE
  64.    30    IF (ABS(DET(1)) .LT. TEN) GO TO 40
  65.             DET(1) = DET(1)/TEN
  66.             DET(2) = DET(2) + 1.0E0
  67.          GO TO 30
  68.    40    CONTINUE
  69.    50 CONTINUE
  70.    60 CONTINUE
  71.       RETURN
  72.       END
  73.